#include <boost/fusion/include/for_each.hpp>
#include <boost/fusion/include/map.hpp>
#include <boost/unordered_set.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/utility.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>


typedef void (*FunPtr)();

template<typename Function>
struct HandlerTemplate
{
	HandlerTemplate(Function fun) : itsFun(fun) {}

	FunPtr itsFun;
};

template<typename Fun0 = void, typename Fun1 = void, typename Fun2 = void>
class Handler : 
	public HandlerTemplate<Fun0>, 
	public HandlerTemplate<Fun1>, 
	public HandlerTemplate<Fun2>
{
public:
	//typedef std::map<std::make_pair(Fun0, 0), std::make_pair(Fun1, 1), std::make_pair(Fun2, 2)> ContainerType;
	std::vector<FunPtr> itsFunPtrArray;

};